#!usr/bin/env python  
# -*- coding: utf-8 -*-#

#-------------------------------------------------------------------------------
# Name:         marbles  弹球游戏
# Description:  
# Author:       dyg
# Date:         2018/2/8
#-------------------------------------------------------------------------------

import Tkinter,random,time

class Ball():
    def __init__(self,canvas,color,paddle):
        self.canvas = canvas
        self.id = canvas.create_oval(10,10,25,25,fill=color)
        self.paddle = paddle
        self.hit_bottom = False
        self.canvas.move(self.id,245,100)
        starts = [-3, -2, -1, 1, 2, 3]
        random.shuffle(starts)
        self.x = starts[0]#从list里面随机取一个
        self.y = -3 #-3表示y轴运动的速度
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()
        self.num = 0
    def draw(self):
        self.canvas.move(self.id,self.x,self.y)
        pos = self.canvas.coords(self.id)
        if pos[1] <= 0 or self.hit_paddle(pos):
            self.y = -self.y
        if pos[0] <= 0 or pos[2] >= self.canvas_width:
            self.x = -self.x
        if pos[3] >= self.canvas_height:
            self.hit_bottom = True
        if self.hit_paddle(pos) == True:
            self.y = -3
            self.num += 1
    def hit_paddle(self,pos):
        paddle_pos = self.canvas.coords(self.paddle.id)
        if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
            if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
                return True
        return False


class Paddle:
    def __init__(self,canvas,color):
        self.canvas = canvas
        self.id = canvas.create_rectangle(0,0,100,10,fill=color)
        self.canvas.move(self.id,200,300)
        self.x = 0
        self.canvas_width = self.canvas.winfo_width()
        #按键盘左键就是响应self.turn_left
        self.canvas.bind_all('<Key-Left>',self.turn_left)
        # 按键盘右键就是响应self.turn_right
        self.canvas.bind_all('<Key-Right>', self.turn_right)
    def draw(self):
        pos = self.canvas.coords(self.id)
        if pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width:
            self.canvas.move(self.id, self.x, 0)
        # elif pos[2] >= self.canvas_width:
        #     self.x = 0

    def turn_left(self,event):
        self.x = -4
    def turn_right(self,event):
        self.x = 4


tk = Tkinter.Tk()
tk.title('game')
tk.resizable(0,0)
tk.wm_attributes('-topmost',1)
canvas = Tkinter.Canvas(tk,width=500,height=400,bd=0,highlightthickness = 0)
canvas.pack()
tk.update()

paddle =Paddle(canvas,'blue')
ball = Ball(canvas,'red',paddle)

while 1:
    if not ball.hit_bottom:
        ball.draw()
        paddle.draw()
    else:
        time.sleep(3)
        canvas.create_text(250, 150, text="游戏失败，继续努力", \
                           font=("Courier", 30), fill='yellow')
        string = "成功次数 %s "
        canvas.create_text(250, 180, text=string % ball.num, font=("Courier", 20), fill="yellow")
        break
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)

# from Tkinter import *
# import random
# import time
#
#
# class Ball:
#     def __init__(self, canvas, paddle, color):
#         self.canvas = canvas
#         self.paddle = paddle
#         self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
#         self.canvas.move(self.id, 245, 100)
#         startx = [-3, -2, -1, 1, 2, 3]
#         random.shuffle(startx)
#         self.x = startx[0]
#         self.y = -3
#         self.canvas_height = self.canvas.winfo_height()
#         self.canvas_width = self.canvas.winfo_width()
#         self.hit_bottom = False
#
#     def draw(self):
#         self.canvas.move(self.id, self.x, self.y)
#         pos = self.canvas.coords(self.id)  # top-left bottom-right
#         if (pos[1] <= 0 or self.hit_paddle(pos) == True):
#             self.y = -self.y
#         if (pos[0] <= 0 or pos[2] >= self.canvas_width):
#             self.x = -self.x
#         if (pos[3] >= self.canvas_height):
#             self.hit_bottom = True
#
#     def hit_paddle(self, pos):
#         paddle_pos = self.canvas.coords(self.paddle.id)
#         if (pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]):
#             if (pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]):
#                 return True
#         return False
#
#
# class Paddle:
#     def __init__(self, canvas, color):
#         self.canvas = canvas
#         self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)
#         self.x = 0
#         self.canvas.move(self.id, 200, 300)
#         self.canvas_width = self.canvas.winfo_width()
#         self.canvas.bind_all("<Key-Left>", self.turn_left)
#         self.canvas.bind_all("<Key-Right>", self.turn_right)
#
#     def draw(self):
#         pos = self.canvas.coords(self.id)
#         if (pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width):
#             self.canvas.move(self.id, self.x, 0)
#         # self.x = 0
#
#     def turn_left(self, event):
#         self.x = -4
#
#     def turn_right(self, event):
#         self.x = 4
#
#
# tk = Tk()
# tk.title("Game")
# tk.resizable(0, 0)  # not resizable
# tk.wm_attributes("-topmost", 1)  # at top
# canvas = Canvas(tk, width=500, height=500, bd=0, highlightthickness=0)
# canvas.pack()
# tk.update()  # init
# paddle = Paddle(canvas, 'blue')
# ball = Ball(canvas, paddle, 'red')
# while 1:
#     if (ball.hit_bottom == False):
#         ball.draw()
#         paddle.draw()
#     tk.update_idletasks()
#     tk.update()
#     time.sleep(0.01)
